nacos 集群模式接入使用

第三方组件声明

因依赖于第三方版本,请第三方组件、中间件和本文保持一致,避免由于第三方升级的兼容性导致无法正常使用。

概述

Nacos 3.2 之后,应用接入除了 HTTP 端口外,还会依赖 gRPC 端口。生产环境建议使用 3 个 Nacos Server + 1 个独立 Console + 1 个 nginx 统一入口 的方式部署集群,对外分别提供控制台入口和应用接入入口。

接入建议

使用官方 Nacos 包部署时,PIGX 项目中的 pigx-register 模块无需启动。 推荐将 pigx-register 域名映射到 nginx 所在机器 IP,微服务统一连接 pigx-register:8848。这样可以保持原有接入习惯,同时兼容 Nacos 3.2 的 HTTP 和 gRPC 通信。控制台则单独通过 8080 端口访问。

部署规划

推荐形态如下:

  • 3 个 Nacos Server:负责服务注册、配置管理和集群选举
  • 1 个独立 Console:负责页面管理入口,单独占用 8080
  • 1 个 nginx 入口:统一代理应用侧的 HTTP 8848 和 gRPC 9848

推荐启动顺序如下:

  1. 启动 server-1
  2. 启动 server-2
  3. 启动 server-3
  4. 启动 console
  5. 启动 nginx
端口占用

部署前请先确认 808088489848188481885818868 没有被其他进程占用。独立 console 会额外占用 8080,不能遗漏。

下载 Nacos Server

官方发行版下载地址:

官方参考文档:

解压后,建议按如下方式准备目录:

/opt/nacos-3.2.1-cluster/
├── server-1/
├── server-2/
├── server-3/
└── console/

其中:

  • console/ 为独立控制台实例目录
  • server-1server-2server-3 分别为 3 个 Nacos 节点实例目录

端口规划

对外入口

类型端口说明
Console 入口8080人员访问控制台,页面入口 http://ip:8080/
nginx HTTP 入口8848微服务 HTTP/OpenAPI 入口
nginx gRPC 入口9848微服务 gRPC 入口

Nacos 节点

节点HTTPgRPC(client)gRPC(server)JRaft
server-118848198481984917848
server-218858198581985917858
server-318868198681986917868
端口说明

8080 只给人访问控制台;8848/9848 只给应用接入;19849/19859/1986917848/17858/17868 属于集群内部通信端口,也需要确保节点间可达。

配置 Nacos 集群

1. 初始化数据库

创建 Nacos 使用的数据库,例如:

CREATE DATABASE IF NOT EXISTS pigxx_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

执行 PIGX nacos 配置文件初始化脚本: pigx/db/pigxx_config.sql,将基础表结构和默认数据导入到 pigxx_config 数据库中。

2. 配置 server-1

编辑 server-1/conf/application.properties

server.address=0.0.0.0
server.tomcat.basedir=file:./work
nacos.server.main.port=18848
nacos.inetutils.ip-address=127.0.0.1

spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/pigxx_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user=root
db.password=root

nacos.core.auth.enabled=true
nacos.core.auth.admin.enabled=true
nacos.core.auth.console.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.server.identity.key=PigxNacosIdentityKey
nacos.core.auth.server.identity.value=PigxNacosIdentityValue
nacos.core.auth.plugin.nacos.token.secret.key=VGhpcy1pcy1hLWN1c3RvbS10b2tlbi1zZWNyZXQta2V5LWZvci1waWd4LTMuMi4x

nacos.core.api.compatibility.client.enabled=true
nacos.core.api.compatibility.admin.enabled=true
nacos.core.api.compatibility.console.enabled=true
配置说明

nacos.inetutils.ip-address 请改为当前节点实际 IP。单机多实例演示场景可以使用 127.0.0.1,多机部署时必须填写节点真实地址。

3. 配置 server-2 和 server-3

复制 server-1 配置到 server-2server-3,仅调整主端口:

  • server-2nacos.server.main.port=18858
  • server-3nacos.server.main.port=18868

4. 配置集群节点

分别编辑 3 个节点的 conf/cluster.conf,内容保持一致:

127.0.0.1:18848
127.0.0.1:18858
127.0.0.1:18868
节点地址

如果是多机部署,请将 127.0.0.1 替换为各节点真实 IP,并确保 cluster.confnacos.inetutils.ip-address、防火墙放行规则三者保持一致。

5. 配置独立 console

控制台建议独立部署,不与 server 节点复用端口。编辑 console/conf/application.properties

server.address=0.0.0.0
server.tomcat.basedir=file:./work
nacos.server.main.port=18080
nacos.console.port=8080
nacos.console.contextPath=
nacos.console.remote.server.context-path=/nacos
nacos.inetutils.ip-address=127.0.0.1

nacos.core.auth.enabled=true
nacos.core.auth.admin.enabled=true
nacos.core.auth.console.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.server.identity.key=PigxNacosIdentityKey
nacos.core.auth.server.identity.value=PigxNacosIdentityValue
nacos.core.auth.plugin.nacos.token.secret.key=VGhpcy1pcy1hLWN1c3RvbS10b2tlbi1zZWNyZXQta2V5LWZvci1waWd4LTMuMi4x

nacos.core.api.compatibility.client.enabled=true
nacos.core.api.compatibility.admin.enabled=true
nacos.core.api.compatibility.console.enabled=true
控制台说明

控制台只给人访问,推荐独立监听 8080,页面入口为 http://ip:8080。应用注册与配置拉取仍然走 nginx 暴露的 8848/9848,不要让业务应用直接连 console。

6. 配置 nginx 统一入口

应用入口推荐由 nginx 统一代理:

upstream nacos_app_http {
    server 127.0.0.1:18848 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:18858 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:18868 max_fails=3 fail_timeout=30s;
    keepalive 32;
}

server {
    listen 8848;
    server_name _;

    location / {
        proxy_pass http://nacos_app_http;
        proxy_connect_timeout 5s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
    }
}
upstream nacos_app_grpc {
    server 127.0.0.1:19848 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:19858 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:19868 max_fails=3 fail_timeout=30s;
}

server {
    listen 9848;
    proxy_connect_timeout 5s;
    proxy_timeout 600s;
    proxy_pass nacos_app_grpc;
}
入口约定

微服务侧只需要配置 server-addr=nginx-ip:8848,但 nginx 侧必须同时对外暴露 88489848,否则 Nacos 3.2 客户端会连接异常。

gRPC 转发

9848 的代理配置必须放在 nginx stream 模块中做 TCP 转发,不能按普通 HTTP 代理处理。

启动集群

依次启动 3 个 Nacos 节点、1 个独立 console 和 nginx:

sh /opt/nacos-3.2.1-cluster/server-1/bin/startup.sh -d server
sh /opt/nacos-3.2.1-cluster/server-2/bin/startup.sh -d server
sh /opt/nacos-3.2.1-cluster/server-3/bin/startup.sh -d server
sh /opt/nacos-3.2.1-cluster/console/bin/startup.sh -d console

确认 4 个 Nacos 进程启动后,再启动 nginx 并检查端口监听情况:

lsof -nP -iTCP:8080 -iTCP:8848 -iTCP:9848 -iTCP:18848 -iTCP:18858 -iTCP:18868 -sTCP:LISTEN
启动验证

访问 http://ip:8080 验证控制台是否可用。应用接入仍然只走 8848/9848

微服务接入配置

修改 PIGX 各微服务的配置文件,将 Nacos 地址统一指向 nginx 入口:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: pigx-register:8848
        username: nacos
        password: nacos
      config:
        server-addr: pigx-register:8848
        username: nacos
        password: nacos

如果没有域名,可以通过 hostspigx-register 指向 nginx 所在机器 IP:

127.0.0.1 pigx-register
不要直连节点

Nacos 3.2 生产环境不建议继续使用 18848,18858,18868 这种多地址直连方式。推荐统一通过 nginx 暴露的 8848/9848 访问,避免客户端 HTTP 正常但 gRPC 连接失败。